package bz.ziro.kanbe.logic;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import bz.ziro.kanbe.model.SiteListData;

/**
 * リストデータ作成用ロジック
 * @author Administrator
 */
public class ListLogic {

    //@SuppressWarnings("unused")
    private static final Logger logger = Logger.getLogger(ListLogic.class.getName());

    /**
     * XML文字列から属性マップを作製
     * @param aXmlData
     * @return
     */
    public static Map<String,String> createXMLMap(String aXmlData) {

        Map<String,String> dataMap = new HashMap<String,String>();

        // ドキュメントビルダーファクトリを生成
        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
        try {
            // ドキュメントビルダーを生成
        	DocumentBuilder builder = dbfactory.newDocumentBuilder();
        	// パースを実行してDocumentオブジェクトを取得
        	Document doc = builder.parse(new ByteArrayInputStream(aXmlData.getBytes("UTF-8")));

            Element root = doc.getDocumentElement();
            NodeList paramList = root.getElementsByTagName("parameter");

            //属性数回繰り返す
            for ( int cnt = 0; cnt < paramList.getLength(); ++cnt ) {
                Element dataElm = (Element)paramList.item(cnt);

                String defineName = dataElm.getAttribute("name");
                String textData = dataElm.getTextContent();
                dataMap.put(defineName, textData);
            }
        } catch (Exception ex) {
        }
        return dataMap;
    }
    /**
     * リストデータのXML用リストを作成
     * @param siteDataList
     * @return
     */
	public static List<String> createLineList(List<SiteListData> siteDataList) {
    	List<String> lineList = new ArrayList<String>();
        //データ数回繰り返す
        for ( SiteListData data : siteDataList ) {
            String line = createLine(data);
            lineList.add(line);
        }
        return lineList;
	}
	
    /**
     * １行データで取得する
     * @param data
     * @return
     */
    private static String createLine(SiteListData data) {

        String rtnLine = "<lineData key=\"";
        rtnLine += (data.getKey().getId() + "\"");

        String xmlData = data.getData();
        // ドキュメントビルダーファクトリを生成
        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
        try {
            // ドキュメントビルダーを生成
        	DocumentBuilder builder = dbfactory.newDocumentBuilder();
        	// パースを実行してDocumentオブジェクトを取得
        	Document doc = builder.parse(new ByteArrayInputStream(xmlData.getBytes("UTF-8")));
        	// ルート要素を取得（タグ名：message）
        	Element root = doc.getDocumentElement();
        	NodeList paramList = root.getElementsByTagName("parameter");
        	//属性数回繰り返す
        	for ( int cnt = 0; cnt < paramList.getLength(); ++cnt ) {
        	    Element dataElm = (Element)paramList.item(cnt);
        	    String defineName = dataElm.getAttribute("name");
        	    String textData = dataElm.getTextContent();
        	    //改行を削除
        	    String noCr = textData.replaceAll("\r","");
        	    String noLf = noCr.replaceAll("\n","");
        	    //行に追加
        	    rtnLine += (" " + defineName + "=\"" + noLf +"\"");
        	}
        } catch ( Exception ex ) {
        	logger.info(ex.getMessage());
        }
        rtnLine += "/>";
        return rtnLine;
    }
}
